/* 
   lecture.h
*/

/*Librairies*/
#include <fstream>
#include <string> 
#include <iostream>
#include <vector>
#include <sstream>
#include "lecture.h"

using namespace std;

/*constructeur par defaut de la classe*/
lecture::lecture(){
	//si on a pas d'arguments on ne fait rien
}

/*constructeur de la classe*/
lecture::lecture(char *chemain_fichier)
{
	if( chemain_fichier==NULL)
	{
		//si on a pas de chemain vers le fichier a ouvrir on ne fait rien
	}
	else
	{
		this->fichier.open(chemain_fichier, std::ios::in);//on ouvre le fichier a lire
		this->Fichier_lisible();//on verifie si le fichier est lisible

	}
}

/*destructeur de la classe */
lecture::~lecture()
{
	this->fichier.close(); //fermeture du fichier a lire
}

/*determine si le fichier est lisible*/
bool lecture::is_readable() 
{ 
    return !fichier.fail(); 
} 

/*affiche si le fichier est lisible*/
int lecture::Fichier_lisible()
{
	if ( this->is_readable()  ) 
    	{
		return 0;
    	}	 
    	else 
    	{
		return -1;
	} 
}

/*stransforme une ligne en un vecteur d'entier*/
int lecture::Ligne_vers_vecteur()
{
	istringstream iss (ligne);  //creation d'un flux, contenant la ligne a separer
	string mot;
	int mot_int;

	while (std::getline(iss,mot,' '))//getline retourne une valeur d'un fichier texte avant un espace. a chaque rappelle, il retourne la valeur suivante
	{
		istringstream(mot)>>mot_int; //creer un flux, et le cast en int
		this->nombre_extrait.push_back(mot_int); //ajoute "mot" au vecteur
		this->longeur_vector++;//incrementation de la longeur du vecteur
	}
	return 0;
}

/*extrait la ligne et la met dans un vecteur*/
int lecture::Extraction_ligne()
{
	
        if(std::getline( this->fichier, this->ligne ))// si on arrive a lire une ligne complete du fichier
	{
		this->Ligne_vers_vecteur();//appel de la fonction pour extraire chaques nombres de la ligne
		return 0;
	}
	else
	{
		return -2;
	}
}




/*fonction de lecture du fichier*/
std::vector<int> lecture::Lecture_ligne()
{
	
	this->nombre_extrait.clear();//supression de toutes les valleurs contenue dans le vecteur
	if(Extraction_ligne() == -2) //extraction ligne -> vector
	{
		this->nombre_extrait.clear(); //supression des valleurs contenue dans le vecteur pour retourner un vecteur nul si la lecture de la ligne suivante a echouer
	}
	else{
	}
	return this->nombre_extrait;//retour du vecteur contenant la liste des valeurs de la ligne lue
}

